home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / emacs.lha / emacs-19.16 / src / ymakefile < prev   
Makefile  |  1993-07-06  |  24KB  |  747 lines

  1. /* Makefile for GNU Emacs.
  2.    Copyright (C) 1985, 1987, 1988, 1993 Free Software Foundation, Inc.
  3.  
  4. This file is part of GNU Emacs.
  5.  
  6. GNU Emacs is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU Emacs is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU Emacs; see the file COPYING.  If not, write to
  18. the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  19.  
  20. srcdir=@srcdir@/src
  21. VPATH=@srcdir@/src
  22. dot = .
  23. /* On Xenix and the IBM RS6000, double-dot gets screwed up.  */
  24. lispdir = ${srcdir}/$(dot)$(dot)/lisp/
  25. libsrc = $(dot)$(dot)/lib-src/
  26. etc = $(dot)$(dot)/etc/
  27. shortnamesdir = $(dot)$(dot)/shortnames/
  28. cppdir = $(dot)$(dot)/cpp/
  29. oldXMenudir = $(dot)$(dot)/oldXMenu/
  30.  
  31. /* just to be sure the sh is used */
  32. SHELL=/bin/sh
  33.  
  34. #define NO_SHORTNAMES
  35. #define THIS_IS_YMAKEFILE
  36. #define NOT_C_CODE
  37. #include "config.h"
  38.  
  39. /* Use HAVE_X11 as an alias for X11 in this file
  40.    to avoid problems with X11 as a subdirectory name
  41.    in -I and other such options which pass through this file. */
  42.  
  43. #ifdef X11
  44. #define HAVE_X11
  45. #undef X11
  46. #endif
  47.  
  48. /* On some machines #define register is done in config;
  49.    don't let it interfere with this file.  */
  50. #undef register
  51.  
  52. /* On some systems we may not to use the system make command. */
  53. #ifdef MAKE_COMMAND
  54. MAKE = MAKE_COMMAND
  55. #else
  56. MAKE=make
  57. #endif
  58.  
  59. #ifdef C_COMPILER
  60. CC = C_COMPILER
  61. #endif
  62.  
  63. /* Some machines don't find the standard C libraries in the usual place.  */
  64. #ifndef ORDINARY_LINK
  65. #ifndef LIB_STANDARD
  66. #define LIB_STANDARD -lc
  67. #endif
  68. #else
  69. #ifndef LIB_STANDARD
  70. #define LIB_STANDARD
  71. #endif
  72. #endif
  73.  
  74. /* Unless inhibited or changed, use -lg to link for debugging.  */
  75. #ifndef LIBS_DEBUG
  76. #define LIBS_DEBUG -lg
  77. #endif
  78.  
  79. /* Some s/*.h files define this to request special libraries.  */
  80. #ifndef LIBS_SYSTEM
  81. #define LIBS_SYSTEM
  82. #endif
  83.  
  84. /* Some m/*.h files define this to request special libraries.  */
  85. #ifndef LIBS_MACHINE
  86. #define LIBS_MACHINE
  87. #endif
  88.  
  89. #ifndef LIB_MATH
  90. # ifdef LISP_FLOAT_TYPE
  91. #  define LIB_MATH -lm
  92. # else /* ! defined (LISP_FLOAT_TYPE) */
  93. #  define LIB_MATH
  94. # endif /* ! defined (LISP_FLOAT_TYPE) */
  95. #endif /* LIB_MATH */
  96.  
  97. /* Some s/*.h files define this to request special switches in ld.  */
  98. #ifndef LD_SWITCH_SYSTEM
  99. #if !defined (__GNUC__) && (defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)))
  100. #define LD_SWITCH_SYSTEM -X
  101. #else /* ! defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)) */
  102. #define LD_SWITCH_SYSTEM
  103. #endif /* ! defined(COFF_ENCAPSULATE) || (defined (BSD) && !defined (COFF)) */
  104. #endif /* LD_SWITCH_SYSTEM */
  105.  
  106. /* Some m/*.h files define this to request special switches in ld.  */
  107. #ifndef LD_SWITCH_MACHINE
  108. #define LD_SWITCH_MACHINE
  109. #endif
  110.  
  111. /* Some m/*.h files define this to request special switches in cc.  */
  112. #ifndef C_SWITCH_MACHINE
  113. #define C_SWITCH_MACHINE
  114. #endif
  115.  
  116. /* Some s/*.h files define this to request special switches in cc.  */
  117. #ifndef C_SWITCH_SYSTEM
  118. #define C_SWITCH_SYSTEM
  119. #endif
  120.  
  121. /* These macros are for switches specifically related to X Windows.  */
  122. #ifndef C_SWITCH_X_MACHINE
  123. #define C_SWITCH_X_MACHINE
  124. #endif
  125.  
  126. #ifndef C_SWITCH_X_SYSTEM
  127. #define C_SWITCH_X_SYSTEM
  128. #endif
  129.  
  130. #ifndef C_SWITCH_X_SITE
  131. #define C_SWITCH_X_SITE
  132. #endif
  133.  
  134. #ifndef LD_SWITCH_X_SITE
  135. #define LD_SWITCH_X_SITE
  136. #endif
  137.  
  138. /* These can be passed in from config.h to define special load and
  139.    compile switches needed by individual sites */
  140. #ifndef LD_SWITCH_SITE
  141. #define LD_SWITCH_SITE
  142. #endif
  143.  
  144. #ifndef C_SWITCH_SITE
  145. #define C_SWITCH_SITE
  146. #endif
  147.  
  148. #ifndef ORDINARY_LINK
  149.  
  150. #ifndef START_FILES
  151. #ifdef NO_REMAP
  152. #ifdef COFF_ENCAPSULATE
  153. #define START_FILES pre-crt0.o /usr/local/lib/gcc-crt0.o
  154. #else /* ! defined (COFF_ENCAPSULATE) */
  155. #define START_FILES pre-crt0.o /lib/crt0.o
  156. #endif /* ! defined (COFF_ENCAPSULATE) */
  157. #else /* ! defined (NO_REMAP) */
  158. #define START_FILES crt0.o
  159. #endif /* ! defined (NO_REMAP) */
  160. #endif /* START_FILES */
  161. STARTFILES = START_FILES
  162.  
  163. #else /* ORDINARY_LINK */
  164.  
  165. /* config.h might want to force START_FILES anyway */
  166. #ifdef START_FILES
  167. STARTFILES = START_FILES
  168. #endif /* START_FILES */
  169.  
  170. #endif /* not ORDINARY_LINK */
  171.  
  172.  
  173. /* cc switches needed to make `asm' keyword work.
  174.    Nothing special needed on most machines.  */
  175. #ifndef C_SWITCH_ASM
  176. #define C_SWITCH_ASM
  177. #endif
  178.  
  179. /* Figure out whether the system cpp can handle long names.
  180.    Do it by testing it right now.
  181.    If it loses, arrange to use the GNU cpp.  */
  182.  
  183. #define LONGNAMEBBBFOOX
  184. #ifdef LONGNAMEBBBARFOOX
  185. /* Installed cpp fails to distinguish those names!  */
  186. /* Arrange to compile the GNU cpp later on */
  187. #define NEED_CPP
  188. /* Cause cc to invoke the cpp that comes with Emacs,
  189.    which will be in a file named localcpp.  */
  190. MYCPPFLAG= -Blocal
  191. /* LOCALCPP is the local one or nothing.
  192.    CPP is the local one or the standardone.  */
  193. LOCALCPP= localcpp
  194. #endif /* ! defined (LONGNAMEBBBARFOOX) */
  195.  
  196. #ifdef SHORTNAMES
  197. SHORT= shortnames
  198. #endif
  199.  
  200. /* DO NOT use -R.  There is a special hack described in lastfile.c
  201.    which is used instead.  Some initialized data areas are modified
  202.    at initial startup, then labeled as part of the text area when
  203.    Emacs is dumped for the first time, and never changed again. */
  204.  
  205. /* If you want to debug, you can add C_DEBUG_SWITCH to this list.
  206.    If you want to optimize, you can add C_OPTIMIZE_SWITCH to the list.  */
  207.  
  208. /* -Demacs is needed to make some files produce the correct version
  209.    for use in Emacs.
  210.  
  211.    -DHAVE_CONFIG_H is needed for some other files to take advantage of
  212.    the information in `config.h'.  */
  213. CFLAGS=-g
  214. ALL_CFLAGS=-Demacs -DHAVE_CONFIG_H $(MYCPPFLAG) -I${srcdir} -I. C_SWITCH_MACHINE C_SWITCH_X_MACHINE C_SWITCH_SYSTEM C_SWITCH_X_SYSTEM C_SWITCH_SITE C_SWITCH_X_SITE ${CFLAGS}
  215. .c.o:
  216.     $(CC) -c $(CPPFLAGS) $(ALL_CFLAGS) $<
  217.  
  218. #ifndef LIBX10_MACHINE
  219. #define LIBX10_MACHINE
  220. #endif
  221.  
  222. #ifndef LIBX11_MACHINE
  223. #define LIBX11_MACHINE
  224. #endif
  225.  
  226. #ifndef LIBX10_SYSTEM
  227. #define LIBX10_SYSTEM
  228. #endif
  229.  
  230. #ifndef LIBX11_SYSTEM
  231. #define LIBX11_SYSTEM
  232. #endif
  233.  
  234. #ifndef LIB_X11_LIB
  235. #define LIB_X11_LIB -lX11
  236. #endif
  237.  
  238. #ifdef HAVE_X_WINDOWS
  239. #ifdef HAVE_X_MENU
  240.  
  241. /* Include xmenu.o in the list of X object files.  */
  242. XOBJ= xterm.o xfns.o xfaces.o xmenu.o xselect.o xrdb.o
  243.  
  244. /* The X Menu stuff is present in the X10 distribution, but missing
  245.    from X11.  If we have X10, just use the installed library;
  246.    otherwise, use our own copy.  */
  247. #ifdef HAVE_X11
  248. OLDXMENU= libXMenu11.a
  249. LIBXMENU= $(OLDXMENU)
  250. #else /* ! defined (HAVE_X11) */
  251. LIBXMENU= -lXMenu
  252. #endif /* ! defined (HAVE_X11) */
  253.  
  254. #else /* ! defined (HAVE_X_MENU) */
  255.  
  256. /* Otherwise, omit xmenu.o from the list of X object files, and
  257.    don't worry about the menu library at all.  */
  258. XOBJ= xterm.o xfns.o xfaces.o xselect.o xrdb.o
  259. LIBXMENU=
  260. #endif /* ! defined (HAVE_X_MENU) */
  261.  
  262. #ifdef HAVE_X11
  263. LIBX= $(LIBXMENU) LD_SWITCH_X_SITE LIB_X11_LIB LIBX11_MACHINE LIBX11_SYSTEM
  264. #else /* ! defined (HAVE_X11) */
  265. LIBX= $(LIBXMENU) LD_SWITCH_X_SITE -lX10 LIBX10_MACHINE LIBX10_SYSTEM
  266. #endif /* ! defined (HAVE_X11) */
  267. #endif /* ! defined (HAVE_X_WINDOWS) */
  268.  
  269. #ifndef ORDINARY_LINK
  270. /* Fix linking if compiled with GCC.  */
  271. #ifdef __GNUC__
  272.  
  273. #if __GNUC__ > 1
  274.  
  275. /* Versions of GCC >= 2.0 put their library, libgcc.a, in obscure
  276.    places that are difficult to figure out at make time.  Fortunately,
  277.    these same versions allow you to pass arbitrary flags on to the
  278.    linker, so there's no reason not to use it as a linker.
  279.  
  280.    Well, it's not quite perfect.  The `-nostdlib' keeps GCC from
  281.    searching for libraries in its internal directories, so we have to
  282.    ask GCC explicitly where to find libgcc.a.  */
  283.  
  284. #ifndef LINKER
  285. #define LINKER $(CC) -nostdlib
  286. #endif
  287.  
  288. #ifndef LIB_GCC
  289. /* Ask GCC where to find libgcc.a.  */
  290. #define LIB_GCC `$(CC) -print-libgcc-file-name`
  291. #endif /* LIB_GCC */
  292.  
  293. GNULIB_VAR = LIB_GCC
  294.  
  295. /* GCC passes any argument prefixed with -Xlinker directly to the
  296.    linker.  See prefix-args.c for an explanation of why we don't do
  297.    this with the shell's `for' construct.
  298.    Note that some people don't have '.'  in their paths, so we must
  299.    use ./prefix-args.  */
  300. #define YMF_PASS_LDFLAGS(flags) `./prefix-args -Xlinker flags`
  301.  
  302. #else /* __GNUC__ < 2 */
  303.  
  304. #ifndef LIB_GCC
  305. #define LIB_GCC /usr/local/lib/gcc-gnulib
  306. #endif /* LIB_GCC */
  307. GNULIB_VAR = `if [ -f LIB_GCC ] ; then echo LIB_GCC; else echo; fi`
  308. #endif /* __GNUC__ < 2 */
  309. #else /* ! defined (__GNUC__) */
  310. GNULIB_VAR = 
  311.  
  312. #endif /* ! defined (__GNUC__) */
  313. #endif /* not ORDINARY_LINK */
  314.  
  315. /* Specify address for ld to start loading at,
  316.    if requested by configuration.  */
  317. #ifdef LD_TEXT_START_ADDR
  318. STARTFLAGS = -T LD_TEXT_START_ADDR -e __start
  319. #endif
  320.  
  321. #ifdef ORDINARY_LINK
  322. LD = $(CC)
  323. #else
  324. #ifdef COFF_ENCAPSULATE
  325. LD=$(CC) -nostdlib
  326. #else /* not ORDINARY_LINK */
  327. #ifdef LINKER
  328. LD=LINKER
  329. #else /* ! defined (LINKER) */
  330. LD=ld
  331. #endif /* ! defined (LINKER) */
  332. #endif /* ! defined (COFF_ENCAPSULATE) */
  333. #endif /* not ORDINARY_LINK */
  334.  
  335. LDFLAGS = LD_SWITCH_SYSTEM LD_SWITCH_MACHINE LD_SWITCH_SITE
  336.  
  337. /* A macro which other sections of ymakefile can redefine to munge the
  338.    flags before they're passed to LD.  This is helpful if you have
  339.    redefined LD to something odd, like "gcc".  */
  340. #ifndef YMF_PASS_LDFLAGS
  341. #define YMF_PASS_LDFLAGS(flags) flags
  342. #endif
  343.  
  344. /* Allow config.h to specify a replacement file for unexec.c.  */
  345. #ifndef UNEXEC
  346. #define UNEXEC unexec.o
  347. #endif
  348. #ifndef UNEXEC_SRC
  349. #define UNEXEC_SRC unexec.c
  350. #endif
  351.  
  352. #ifdef USE_TEXT_PROPERTIES
  353. #define INTERVAL_SRC intervals.h
  354. #define INTERVAL_OBJ intervals.o textprop.o
  355. #else
  356. #define INTERVAL_SRC
  357. #define INTERVAL_OBJ
  358. #endif
  359.  
  360. #ifdef HAVE_GETLOADAVG
  361. #define GETLOADAVG_OBJ
  362. #else
  363. #define GETLOADAVG_OBJ getloadavg.o
  364. #endif
  365.  
  366. /* lastfile must follow all files
  367.    whose initialized data areas should be dumped as pure by dump-emacs. */
  368. obj=    dispnew.o frame.o scroll.o xdisp.o window.o \
  369.     term.o cm.o $(XOBJ) \
  370.     emacs.o keyboard.o macros.o keymap.o sysdep.o \
  371.     buffer.o filelock.o insdel.o marker.o INTERVAL_OBJ \
  372.     minibuf.o fileio.o dired.o filemode.o \
  373.     cmds.o casetab.o casefiddle.o indent.o search.o regex.o undo.o \
  374.     alloc.o data.o doc.o editfns.o callint.o \
  375.     eval.o floatfns.o fns.o print.o lread.o \
  376.     abbrev.o syntax.o UNEXEC mocklisp.o bytecode.o \
  377.     process.o callproc.o \
  378.     doprnt.o GETLOADAVG_OBJ
  379.  
  380. #ifdef TERMINFO
  381. /* Used to be -ltermcap here.  If your machine needs that,
  382.    define LIBS_TERMCAP in the m/*.h file.  */
  383. #ifndef LIBS_TERMCAP
  384. #define LIBS_TERMCAP -lcurses
  385. #endif /* LIBS_TERMCAP */
  386. termcapobj = terminfo.o
  387. #else /* ! defined (TERMINFO) */
  388. #ifndef LIBS_TERMCAP
  389. #define LIBS_TERMCAP
  390. termcapobj = termcap.o tparam.o
  391. #else /* LIBS_TERMCAP */
  392. termcapobj = tparam.o
  393. #endif /* LIBS_TERMCAP */
  394. #endif /* ! defined (TERMINFO) */
  395.  
  396.  
  397. #ifndef SYSTEM_MALLOC
  398.  
  399. #ifdef GNU_MALLOC  /* New GNU malloc */
  400. #ifdef REL_ALLOC
  401. mallocobj = gmalloc.o ralloc.o vm-limit.o
  402. #else /* ! defined (REL_ALLOC) */
  403. mallocobj = gmalloc.o vm-limit.o
  404. #endif /* ! defined (REL_ALLOC) */
  405. #else /* Old GNU malloc */
  406. mallocobj = malloc.o
  407. #endif /* Old GNU malloc */
  408.  
  409. #endif /* SYSTEM_MALLOC */
  410.  
  411.  
  412. #ifndef HAVE_ALLOCA
  413. allocaobj = alloca.o
  414. #else
  415. allocaobj =
  416. #endif
  417.  
  418.  
  419. /* define otherobj as list of object files that make-docfile
  420.    should not be told about.  */
  421. otherobj= $(termcapobj) lastfile.o $(mallocobj) $(allocaobj)
  422.  
  423. #ifdef LISP_FLOAT_TYPE
  424. #define FLOAT_SUPPORT ${lispdir}float-sup.elc
  425. #else
  426. #define FLOAT_SUPPORT
  427. #endif
  428.  
  429. #ifdef MULTI_FRAME
  430. #define FRAME_SUPPORT ${lispdir}frame.elc ${lispdir}mouse.elc ${lispdir}select.elc ${lispdir}scroll-bar.elc
  431. #else
  432. #define FRAME_SUPPORT
  433. #endif
  434.  
  435. #ifdef VMS
  436. #define VMS_SUPPORT ${lispdir}vmsproc.elc ${lispdir}vms-patch
  437. #else
  438. #define VMS_SUPPORT
  439. #endif
  440.  
  441. /* List of Lisp files loaded into the dumped Emacs.  It's arranged
  442.    like this because it's easier to generate it semi-mechanically from
  443.    loadup.el this way.
  444.  
  445.    Note that this list should not include lisp files which might not
  446.    be present, like site-load.el and site-init.el; this makefile
  447.    expects them all to be either present or buildable.
  448.  
  449.    It should not include version.el.  That file is often changed by
  450.    the build process itself, but most of the files which want to
  451.    depend on lisp.h don't care about those changes.  */
  452. lisp= \
  453.     ${lispdir}abbrev.elc \
  454.     ${lispdir}buff-menu.elc \
  455.     ${lispdir}byte-run.elc \
  456.     ${lispdir}c-mode.elc \
  457.     ${lispdir}files.elc \
  458.     ${lispdir}fill.elc \
  459.     FLOAT_SUPPORT \
  460.     FRAME_SUPPORT \
  461.     ${lispdir}help.elc \
  462.     ${lispdir}indent.elc \
  463.     ${lispdir}isearch.elc \
  464.     ${lispdir}lisp-mode.elc \
  465.     ${lispdir}lisp.elc \
  466.     ${lispdir}loaddefs.el \
  467.     ${lispdir}map-ynp.elc \
  468.     ${lispdir}page.elc \
  469.     ${lispdir}paragraphs.elc \
  470.     ${lispdir}paths.el \
  471.     ${lispdir}register.elc \
  472.     ${lispdir}replace.elc \
  473.     ${lispdir}simple.elc \
  474.     ${lispdir}startup.elc \
  475.     ${lispdir}subr.elc \
  476.     ${lispdir}text-mode.elc \
  477.     ${lispdir}vc-hooks.elc \
  478.     VMS_SUPPORT \
  479.     ${lispdir}window.elc
  480.  
  481. /* Construct full set of libraries to be linked.
  482.    Note that SunOS needs -lm to come before -lc; otherwise, you get
  483.    duplicated symbols.  */
  484. LIBES = $(LIBX) LIBS_SYSTEM LIBS_MACHINE LIBS_TERMCAP \
  485.    LIBS_DEBUG $(GNULIB_VAR) LIB_MATH LIB_STANDARD
  486.  
  487. /* Enable recompilation of certain other files depending on system type.  */
  488.  
  489. #ifndef OTHER_FILES
  490. #define OTHER_FILES
  491. #endif
  492.  
  493. /* Enable inclusion of object files in temacs depending on system type.  */
  494. #ifndef OBJECTS_SYSTEM
  495. #define OBJECTS_SYSTEM
  496. #endif
  497.  
  498. #ifndef OBJECTS_MACHINE
  499. #define OBJECTS_MACHINE
  500. #endif
  501.  
  502. all: emacs OTHER_FILES
  503.  
  504. emacs: temacs ${etc}DOC ${lisp}
  505. #ifdef CANNOT_DUMP
  506.     ln temacs emacs
  507. #else
  508. #ifdef HAVE_SHM
  509.     -if [ -w ${srcdir}/../lisp ]; then \
  510.       w=`pwd`; cd ${srcdir}; $${w}/temacs -nl -batch -l ../lisp/inc-vers; \
  511.     else true; fi
  512.     ./temacs -nl -batch -l loadup dump
  513. #else /* ! defined (HAVE_SHM) */
  514.     -if [ -w ${srcdir}/../lisp ]; then \
  515.       w=`pwd`; cd ${srcdir}; $${w}/temacs -batch -l ../lisp/inc-vers; \
  516.     else true; fi
  517.     ./temacs -batch -l loadup dump
  518. #endif /* ! defined (HAVE_SHM) */
  519. #endif /* ! defined (CANNOT_DUMP) */
  520.  
  521. ${etc}DOC: ${libsrc}make-docfile ${obj} ${lisp} OBJECTS_SYSTEM OBJECTS_MACHINE
  522.     rm -f ${etc}DOC
  523.     ${libsrc}make-docfile -d ${srcdir} ${obj} OBJECTS_SYSTEM OBJECTS_MACHINE ${lisp} \
  524.       ${lispdir}version.el > ${etc}DOC
  525.  
  526. ${libsrc}make-docfile:
  527.     cd ${libsrc}; ${MAKE} ${MFLAGS} make-docfile ../arch-lib
  528.  
  529. /* Some systems define this to cause parallel Make-ing.  */
  530. #ifndef MAKE_PARALLEL
  531. #define MAKE_PARALLEL
  532. #endif
  533.  
  534. temacs: MAKE_PARALLEL $(LOCALCPP) $(SHORT) $(STARTFILES) $(OLDXMENU) ${obj} ${otherobj} OBJECTS_SYSTEM OBJECTS_MACHINE prefix-args
  535.     $(LD) YMF_PASS_LDFLAGS (${STARTFLAGS} ${LDFLAGS}) \
  536.     -o temacs ${STARTFILES} ${obj} ${otherobj}  \
  537.     OBJECTS_SYSTEM OBJECTS_MACHINE ${LIBES}
  538.  
  539. prefix-args: prefix-args.c
  540.     $(CC) $(ALL_CFLAGS) ${srcdir}/prefix-args.c -o prefix-args
  541.  
  542. /* These are needed for C compilation, on the systems that need them */
  543. #ifdef NEED_CPP
  544. CPP = ./localcpp
  545. localcpp:
  546.     cd ${cppdir}; ${MAKE} ${MFLAGS} EMACS=-DEMACS
  547.     ln ${cppdir}cpp localcpp  /* Name where ALL_CFLAGS will refer to it */
  548. /* cc appears to be cretinous and require all of these to exist
  549.    if -B is specified -- we can't use one local pass and let the
  550.    others be the standard ones.  What a loser.
  551.    We can't even use ln, since they are probably
  552.    on different disks.  */
  553.     cp /lib/ccom localccom
  554.     -cp /lib/optim localoptim
  555.     -cp /lib/c2 localc2
  556.     cp /bin/as localas
  557. #else /* ! defined (NEED_CPP) */
  558. CPP = $(CC) -E
  559. #endif /* ! defined (NEED_CPP) */
  560.  
  561. #ifdef SHORTNAMES
  562. shortnames:
  563.     cd ${shortnamesdir}; ${MAKE} ${MFLAGS}
  564. #endif
  565.  
  566. /* Don't lose if this was not defined.  */
  567. #ifndef OLDXMENU_OPTIONS
  568. #define OLDXMENU_OPTIONS
  569. #endif
  570.  
  571. #ifdef HAVE_X_WINDOWS
  572. #ifdef HAVE_X_MENU
  573. #ifdef HAVE_X11
  574. $(OLDXMENU): really-oldXMenu
  575.     -rm -f $(OLDXMENU) /* We might have a link to an old version.  */
  576.     ${LN_S} ${oldXMenudir}libXMenu11.a $(OLDXMENU)
  577.  
  578. /* Encode the values of these two macros in Make variables,
  579.    so we can use $(...) to substitute their values within "...".  */
  580. C_SWITCH_MACHINE_1 = C_SWITCH_MACHINE
  581. C_SWITCH_SYSTEM_1 = C_SWITCH_SYSTEM
  582. C_SWITCH_SITE_1 = C_SWITCH_SITE
  583. C_SWITCH_X_SITE_1 = C_SWITCH_X_SITE
  584. C_SWITCH_X_MACHINE_1 = C_SWITCH_X_MACHINE
  585. really-oldXMenu:
  586.     cd ${oldXMenudir}; ${MAKE} ${MFLAGS} OLDXMENU_OPTIONS \
  587.     CC='${CC}' CFLAGS='${CFLAGS}' MAKE='${MAKE}' \
  588.     "C_SWITCH_SITE=$(C_SWITCH_SITE_1)" \
  589.     "C_SWITCH_X_SITE=$(C_SWITCH_X_SITE_1)" \
  590.     "C_SWITCH_X_MACHINE=$(C_SWITCH_X_MACHINE_1)" \
  591.     "C_SWITCH_MACHINE=$(C_SWITCH_MACHINE_1)" \
  592.     "C_SWITCH_SYSTEM=$(C_SWITCH_SYSTEM_1)"
  593.     @true  /* make -t should not create really-oldXMenu.  */
  594. #endif /* ! defined (HAVE_X11) */
  595. #endif /* ! defined (HAVE_X_MENU) */
  596. #endif /* ! defined (HAVE_X_WINDOWS) */
  597.  
  598. paths.h: paths.h.in
  599.     @echo "The file paths.h needs to be set up from paths.h.in."
  600.     @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  601.     exit 1
  602.  
  603. config.h: config.h.in
  604.     @echo "The file config.h needs to be set up from config.h.in."
  605.     @echo "Consult the file \`INSTALL' for instructions for building Emacs."
  606.     exit 1
  607.  
  608. /* Some machines have alloca built-in.
  609.    They should define HAVE_ALLOCA, or may just let alloca.s
  610.    be used but generate no code.
  611.    Some have it written in assembler in alloca.s.
  612.    Some use the C version in alloca.c (these define C_ALLOCA in config.h).
  613.    */
  614.  
  615. #ifdef C_ALLOCA
  616. /* We could put something in alloca.c to #define free and malloc
  617.    whenever emacs was #defined, but that's not appropriate for all
  618.    users of alloca in Emacs.  Check out ../lib-src/getopt.c.  */
  619. alloca.o : alloca.c
  620.     $(CC) -c $(CPPFLAGS) -Dfree=xfree -Dmalloc=xmalloc \
  621.     $(ALL_CFLAGS) ${srcdir}/alloca.c
  622. #else
  623. #ifndef HAVE_ALLOCA
  624. alloca.o : alloca.s config.h
  625. /* $(CPP) is cc -E, which may get confused by filenames
  626.    that do not end in .c.  So copy file to a safe name.  */
  627.     cp ${srcdir}/alloca.s allocatem.c
  628. /* Remove any ^L, blank lines, and preprocessor comments,
  629.    since some assemblers barf on them.  Use a different basename for the
  630.    output file, since some stupid compilers (Green Hill's) use that
  631.    name for the intermediate assembler file. */
  632.     $(CPP) $(CPPFLAGS) $(ALL_CFLAGS) allocatem.c | \
  633.     sed -e 's/ //' -e 's/^#.*//' | \
  634.     sed -n -e '/^..*$$/p' > allocax.s
  635.     -rm -f alloca.o
  636. /* Xenix, in particular, needs to run assembler via cc.  */
  637.     $(CC) -c allocax.s
  638.     mv allocax.o alloca.o
  639.     rm allocax.s allocatem.c
  640. #endif /* HAVE_ALLOCA */
  641. #endif /* ! defined (C_ALLOCA) */
  642.  
  643. /* Nearly all the following files depend on lisp.h,
  644.    but it is not included as a dependency because
  645.    it is so often changed in ways that do not require any recompilation
  646.    and so rarely changed in ways that do require any.  */
  647.  
  648. abbrev.o : abbrev.c buffer.h commands.h $(config_h) 
  649. buffer.o : buffer.c syntax.h buffer.h commands.h window.h \
  650.    INTERVAL_SRC blockinput.h $(config_h) 
  651. callint.o : callint.c window.h commands.h buffer.h mocklisp.h \
  652.    keyboard.h $(config_h)
  653. callproc.o : callproc.c paths.h buffer.h commands.h $(config_h) process.h
  654. casefiddle.o : casefiddle.c syntax.h commands.h buffer.h $(config_h) 
  655. casetab.o : casetab.c buffer.h $(config_h)
  656. cm.o : cm.c cm.h termhooks.h $(config_h)
  657. cmds.o : cmds.c syntax.h buffer.h commands.h $(config_h) 
  658. pre-crt0.o : pre-crt0.c
  659. crt0.o : crt0.c $(config_h)
  660.     $(CC) -c $(ALL_CFLAGS) C_SWITCH_ASM ${srcdir}/crt0.c
  661. dired.o : dired.c commands.h buffer.h $(config_h) regex.h
  662. dispnew.o : dispnew.c commands.h frame.h window.h buffer.h dispextern.h \
  663.    termchar.h termopts.h termhooks.h cm.h disptab.h systty.h systime.h $(config_h)
  664. doc.o : doc.c $(config_h) paths.h buffer.h keyboard.h
  665. doprnt.o : doprnt.c
  666. editfns.o : editfns.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) 
  667. emacs.o : emacs.c commands.h systty.h INTERVAL_SRC $(config_h) 
  668. fileio.o : fileio.c window.h buffer.h systime.h INTERVAL_SRC $(config_h) 
  669. filelock.o : filelock.c buffer.h paths.h $(config_h)
  670. filemode.o : filemode.c 
  671. getloadavg.o : getloadavg.c $(config_h)
  672. indent.o : indent.c frame.h window.h indent.h buffer.h $(config_h) termchar.h \
  673.    termopts.h disptab.h
  674. insdel.o : insdel.c window.h buffer.h INTERVAL_SRC blockinput.h $(config_h)
  675. keyboard.o : keyboard.c termchar.h termhooks.h termopts.h buffer.h \
  676.    commands.h frame.h window.h macros.h disptab.h keyboard.h syssignal.h \
  677.    systty.h systime.h dispextern.h intervals.h blockinput.h $(config_h) 
  678. keymap.o : keymap.c buffer.h commands.h keyboard.h termhooks.h blockinput.h \
  679.    $(config_h) 
  680. lastfile.o : lastfile.c 
  681. macros.o : macros.c window.h buffer.h commands.h macros.h $(config_h)
  682. malloc.o : malloc.c $(config_h)
  683. gmalloc.o : gmalloc.c $(config_h)
  684. ralloc.o : ralloc.c $(config_h)
  685. vm-limit.o : vm-limit.c mem-limits.h $(config_h) 
  686. marker.o : marker.c buffer.h $(config_h) 
  687. minibuf.o : minibuf.c syntax.h dispextern.h frame.h window.h \
  688.    buffer.h commands.h $(config_h) 
  689. mocklisp.o : mocklisp.c buffer.h $(config_h)
  690. process.o : process.c process.h buffer.h window.h termhooks.h termopts.h \
  691.    commands.h syssignal.h systime.h systty.h frame.h $(config_h) 
  692. regex.o : regex.c syntax.h buffer.h $(config_h) regex.h 
  693. frame.o : frame.c xterm.h window.h frame.h termhooks.h commands.h keyboard.h \
  694.    buffer.h $(config_h)
  695. scroll.o : scroll.c termchar.h $(config_h) dispextern.h frame.h
  696. search.o : search.c regex.h commands.h buffer.h syntax.h blockinput.h $(config_h) 
  697. syntax.o : syntax.c syntax.h buffer.h commands.h $(config_h) 
  698. sysdep.o : sysdep.c $(config_h) dispextern.h termhooks.h termchar.h termopts.h \
  699.    frame.h syssignal.h systty.h systime.h blockinput.h window.h
  700. term.o : term.c termchar.h termhooks.h termopts.h $(config_h) cm.h frame.h \
  701.    disptab.h
  702. termcap.o : termcap.c $(config_h)
  703. terminfo.o : terminfo.c $(config_h)
  704. tparam.o : tparam.c $(config_h)
  705. undo.o : undo.c buffer.h commands.h $(config_h) 
  706. UNEXEC : UNEXEC_SRC $(config_h)
  707. window.o : window.c indent.h commands.h frame.h window.h buffer.h termchar.h \
  708.    termhooks.h disptab.h keyboard.h $(config_h)
  709. xdisp.o : xdisp.c macros.h commands.h indent.h buffer.h dispextern.h \
  710.    termchar.h frame.h window.h disptab.h termhooks.h $(config_h) 
  711. xfaces.o : xfaces.c dispextern.h frame.h xterm.h buffer.h blockinput.h \
  712.    window.h $(config_h) 
  713. xfns.o : xfns.c buffer.h frame.h window.h keyboard.h xterm.h \
  714.    blockinput.h $(config_h)
  715. xmenu.o : xmenu.c xterm.h window.h frame.h keyboard.h blockinput.h $(config_h)
  716. xterm.o : xterm.c xterm.h termhooks.h termopts.h termchar.h window.h \
  717.   dispextern.h frame.h disptab.h blockinput.h systime.h \
  718.   gnu.h sink.h sinkmask.h $(config_h)
  719. xselect.o : xselect.c dispextern.h frame.h xterm.h blockinput.h $(config_h) 
  720. xrdb.o : xrdb.c $(config_h)
  721.  
  722. /* The files of Lisp proper */
  723.  
  724. alloc.o : alloc.c frame.h window.h buffer.h  puresize.h syssignal.h \
  725.  blockinput.h $(config_h) INTERVAL_SRC
  726. bytecode.o : bytecode.c buffer.h $(config_h) 
  727. data.o : data.c buffer.h puresize.h syssignal.h $(config_h)
  728. eval.o : eval.c commands.h keyboard.h blockinput.h $(config_h)
  729. floatfns.o : floatfns.c $(config_h)
  730. fns.o : fns.c commands.h $(config_h) frame.h buffer.h keyboard.h INTERVAL_SRC
  731. print.o : print.c process.h frame.h window.h buffer.h $(config_h) 
  732. lread.o : lread.c commands.h keyboard.h buffer.h paths.h $(config_h) \
  733.  termhooks.h
  734.  
  735. /* Text properties support */
  736. textprop.o : textprop.c buffer.h intervals.h $(config_h)
  737. intervals.o : intervals.c buffer.h intervals.h $(config_h)
  738.  
  739. /* System-specific programs to be made.
  740.    OTHER_FILES, OBJECTS_SYSTEM and OBJECTS_MACHINE
  741.    select which of these should be compiled.  */
  742.  
  743. sunfns.o  : sunfns.c buffer.h $(config_h)
  744.  
  745. ${libsrc}emacstool: ${libsrc}emacstool.c
  746.     cd ${libsrc}; ${MAKE} ${MFLAGS} emacstool
  747.